Digitizers provide values in a given coordinate system that define the location of a pointing device on the digitizer tablet's surface. The operator typically manipulates the pointing device over the tablet's surface using a probe, for example, for tracing a pattern or design, or for creating a pattern or design. Typically, the tablet is connected to a host computer which displays on its monitor the traced or created pattern or design. The probe is commonly a stylus or a cursor that is either capacitively or inductively coupled to the tablet's surface. In many digitizers, the same controlling software and signal processing circuits are used for determining both X and Y coordinates of the pointing device position. In such digitizers, the signals coupled between the pointing device and the tablet's surface are sampled sequentially--say, first for the X coordinate, and then next for the Y coordinate--so that the respective signals for each of the coordinates are received and processed at different times by the digitizer. The signal processing occurs in real time, so that the user can observe displayed on his monitor the design or pattern while it is being traced or created.
Noise and jitter are common problems encountered in the use of digitizer tablets, especially near other electrical equipment creating electromagnetic interference. A common way to reduce the effects of noise is by filtering and signal averaging, which reduces the impact on the coordinate determination of aberrant signals due to noise and jitter.
Conventional jitter filters used in digitizer tablets are typically low pass filters implemented as a recursive filter: ##EQU1## where: X.sub.n is the new measured value, and x.sub.n, x.sub.n-1, are the filtered values. A recursive filter averages the new data with the previous average; thus, the sequence of old measured value data need not be stored, only the immediately prior (n-1) filtered data.
With such a filter, a noise pulse is reduced by a factor of 1(k+1) in the first coordinate report, k/(k+1).sup.2 in the second, etc.
For example, if we let X.sub.n =X.sub.t +.epsilon., where X.sub.t is the true signal and .epsilon. is noise, and Q is defined as the noise-free component of the resultant coordinate, ##EQU2## This shows that the total "energy" of the Error is eventually dissipated through the filter, but over a number of reports, rather than as a simple spike.
In a relatively quiet electrical environment, a k factor of 1 or less is typically sufficient to filter noise from within the digitizer itself. With more complex equipment becoming prevalent, however, such as large high resolution video screens, noise pulses of very large magnitudes are not uncommon, particularly if the digitizer is located very close to such a monitor.
A possible solution is to increase k. However, there are problems with a large k recursive filter: ##EQU3##
Just as the noise pulse is spread over a number of reports, so are intentional movements of the pointing device. An intentional movement of M gets reported as M/(k+1), then kM/(k+1).sup.2, . . . Stated more formally, ##EQU4## Theoretically, there is always a lag, which becomes smaller and smaller with each new report.
With a large k, two effects are very noticeable: initial movements are truncated (first report is only M/(1+k), and final movements are elongated (subsequent (k.sup.n /(1+k).sup.n) reports arrive after you've stopped.) In other words, reported actions lag behind the real actions, and, with inconsistent movement (such as printing or sketching) the lag causes sharp changes to be blurred, as the subsequent reports of opposing movements cancel themselves. An E traced as shown at 10 in FIG. 1A becomes distorted and appears as shown at 11 in FIG. 1B on the monitor display.
There are also odd secondary effects and implementation effects. Movement is associated with switch status--e.g. movement with a switch closed is interpreted differently by the application than movement with the switch open. The subsequent reports, after the M/(1+k) report, after the switch is released, have questionable switch status--you want to make sure the movement that had occurred gets reported with the switch closed, but that subsequent movement gets reported with the switch open. But, subsequent reports contain both movements, and you can't do both, so typically the subsequent reports contain a switch open status and the tail end of characters are truncated. For example, an E traced as shown at 12 in FIG. 2A appears on the display as shown at 13 in FIG. 2B.
From an implementation viewpoint, integer arithmetic is typically employed for maximum speed, resulting in truncation errors. These truncation errors can produce inaccuracies: i.e., in the series terms k.sup.i /(1+k).sup.i+1, once the truncation brings it to 0, all subsequent terms are lost. In the simplest case, a movement m&lt;(1+k) is completely truncated, such that approaching a point from the left can result in a difference of 2k from the same point approached from the right. [The units of the 2k error are the raw resolution of the tablet; the inaccuracy can be reduced by scaling the resolution, but this is at the expense of the number of bits required to store x.sub.n and x.sub.n-1 ].
The goal is to be able to heavily filter the noise pulses, but minimally filter intentional movement.
One approach is to modify the filter constant as a function of the magnitude of the change.DELTA.--e.g., small changes are heavily filtered and large changes are lightly filtered. This can be implemented as either a discrete or continuous function:
______________________________________ Discrete Continuous ______________________________________ k.sub.heavy if .DELTA. &lt; limit k = k = k/.vertline..DELTA..vertline..sup.j k.sub.light if .DELTA. .gtoreq. limit ______________________________________
The problem with this approach, however, is that it requires that the amplitude of the change be used as a distinguishing criteria between noise and intentional movement. For a small k, this is probably a non-impact requirement, but in a high noise/high k environment, it has serious impact on small intentional movements, and/or, on large noise impulses.
If the noise is larger than the limit, it is only lightly filtered--thus the limit should be set high; but, the higher the limit, the more noticeable becomes the effect on intentional movements. If the limit is set low enough to allow for lightly filtered intentional movements, large noise pulses will produce spikes.
The problem is that the measure used to reduce filtering, amplitude change level, is the very parameter we want to apply the filtering to.